//
//  LoginViewController.m
//  chilemat
//
//  Created by Cristian Gonzalez Figueroa on 02-05-14.
//  Copyright (c) 2014 Chilemat SpA. All rights reserved.
//

#import "LoginViewController.h"
#import "dao.h"
#import <FacebookSDK/FacebookSDK.h>

@interface LoginViewController ()

@end

@implementation LoginViewController

@synthesize viewLoadingBg, objActivityLoading;
@synthesize textEmail, textPassword;
@synthesize json;

UIActivityIndicatorView *aiViewBtnIngresar;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

// This method will be called when the user information has been fetched
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                            user:(id<FBGraphUser>)user {

//  self.profilePictureView.profileID = user.id;
    NSLog(@"user.name =%@", user.name);
    NSLog(@"birthday =%@", user.birthday);
    NSLog(@"location =%@", user.location);

//    NSLog(@"location =%@", user.email);
    
}

-(bool) updateloginUserCLoud:(int) intIdUsuario strIdSocialLogin:(NSString *) strIdSocialLogin {
    
    //Create or Product Shopping Cart
    NSString *strUrl = [NSString stringWithFormat:@"http://mobileecommerce.elasticbeanstalk.com/MobileJsonRegistraUsuario.aspx?strJsonBase=JsonUsuarioLoginUpd&strIdUsuario=%i&strIdSocialLogin=%@", intIdUsuario, strIdSocialLogin];
    
    NSURL *url = [NSURL URLWithString:strUrl];
    
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    
    NSURLResponse * response = nil;
    NSError * error = nil;
    NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
                                          returningResponse:&response
                                                      error:&error];
    if (error == nil)
    {
        //[{"usr":"38" }]
        json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        
        int intIdUsuarioExistente = [ [[json objectAtIndex:0] objectForKey:@"usr"] intValue];
        
        if (intIdUsuario != intIdUsuarioExistente) {//Significa que el usuario hizo logout y volvió a comprar, se actualiza en Amazon el carro y debe hacerse lo mismo localmente.
            dao *objDAO = [[dao alloc] init];
            [objDAO deleteCurrentIdUser];
            [objDAO insertCurrentIdUser:intIdUsuarioExistente];
            
            //Update al usuario del carro de compras local.
            //- (int ) updateUserShoppingCart:(int) intIdUsuario intIdUsuarioNew:(int) intIdUsuarioNew{
            
            [objDAO updateUserShoppingCart:intIdUsuario intIdUsuarioNew:intIdUsuarioExistente];
        }
        
        return YES;
        
    }else{
        NSLog(@"Error");
        
        return NO;
    }
}

// Logged-in user experience
- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView {

    NSLog(@"You're logged in as");

    // Fetch user data
    [FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection,
                                                           id<FBGraphUser> fbUserData,
                                                           NSError *error)
     {
         if (!error)
         {
             NSString *strSocialLogin = [fbUserData objectForKey:@"id"];
             
             NSString *strEmail = [fbUserData objectForKey:@"email"];
             
             NSString *name = [fbUserData objectForKey:@"name"];
             NSString *strPrimerNombre = [fbUserData objectForKey:@"first_name"];
             NSString *strSegundoNombre = [fbUserData objectForKey:@"last_name"];
             
             NSLog(@"name =%@", name);
             //                     NSLog(@"first_name =%@", first_name);
             //                     NSLog(@"last_name =%@", last_name);
             
             //                   NSString *strFullFbName = [fbUserData objectForKey:@"username"];
             
             NSString *strSex = @"";
             
             //Respetar minúsculas
             if ([[fbUserData objectForKey:@"gender"] isEqualToString:@"male"])
             {
                 strSex = @"male";
             }
             else{
                 strSex = @"male";
             }
             
             NSString *birthday = [fbUserData objectForKey:@"birthday"];
             
             NSDateFormatter *format1 = [[NSDateFormatter alloc] init];
             [format1 setDateFormat:@"MM/dd/yyyy"];
             NSDate *dateConversion = [format1 dateFromString:birthday];
             //[format1 release];
             
             NSDateFormatter *format = [[NSDateFormatter alloc] init];
             [format setDateFormat:@"yyyy-MM-dd"];
             
             birthday = [format stringFromDate:dateConversion];
             
             if (![birthday isEqualToString:@""] && birthday != nil)
             {
                 NSLog(@"birthday =%@", birthday);
             }else
             {
                 NSLog(@"Información de fecha en blanco");
             }
             
             //***********************************************************************************************
             /*
              [objDAO insertMaestroClientes:0
              intIdUsuario:intIdUsuario strDigito:@""
              strNombreCompleto:strNombreCompleto strApellidos:strApellidos strCodTelefono:@"" strTelefono:@"" intDia:intDia intMes:intMes intAno:intAno strSex:strSex intFormaPago:0];
              
              */
             //Variables para almacenar en e eCommerce desde Facebook Login (No sabemos si vienen todas o poarte de la información)
             //-------------------------------------------------------------------------------
             //                     NSString *strPrimerNombre = @"";
             //                     NSString *strSegundoNombre = @"";
             NSString *strNombreCompleto = @"";
             
             //                   NSString *strPrimerApellido = @"";
             //                   NSString *strSegundoApellido = @"";
             NSString *strApellidos = @"";
             int intDia = 0;
             int intMes = 0;
             int intAno = 0;
             /*
              NSArray* ArrayFullFbName = [strFullFbName componentsSeparatedByString:@" "];
              //    NSLog(@"ArrayFullFbName.count=%li", ArrayFullFbName.count);
              
              for (int i = 0; i<ArrayFullFbName.count; i++){
              
              if (i == 0) {
              strPrimerNombre = ArrayFullFbName[i];
              }
              
              if (i == 1) {
              strSegundoNombre = ArrayFullFbName[i];
              }
              
              if (i == 2) {
              strPrimerApellido = ArrayFullFbName[i];
              }
              
              if (i == 3) {
              strSegundoApellido = ArrayFullFbName[i];
              }
              }
              */
             strNombreCompleto = strPrimerNombre; //[NSString stringWithFormat:@"%@ %@", strPrimerNombre, strSegundoNombre];
             strApellidos = strSegundoNombre; //[NSString stringWithFormat:@"%@ %@", strPrimerApellido, strSegundoApellido];
             
             //NSString *string = user.birthday;
             //birthday
             
             if ([birthday rangeOfString:@"-"].location != NSNotFound) { //Si es una fecha la obtenemos como Array
                 
                 NSArray* ArrayBirthday = [birthday componentsSeparatedByString:@"-"];
                 intDia = [ArrayBirthday[2] intValue];
                 intMes = [ArrayBirthday[1] intValue];
                 intAno = [ArrayBirthday[0] intValue];
             }
             
             //---------------------------------------------------------------------------------------------------------------------------------------------
             //Data log Facebook
             /*
              2014-06-17 11:48:47.407 chilemat[464:124414] You're logged in as
              2014-06-17 11:48:49.271 chilemat[464:124414] user.name =Cristian Vladimir Gonzalez Figueroa
              2014-06-17 11:48:49.273 chilemat[464:124414] birthday =09/09/1975
              2014-06-17 11:48:49.274 chilemat[464:124414] location =(null)
              2014-06-17 11:48:49.275 chilemat[464:124414] Correo : cvgf2004@gmail.com
              2014-06-17 11:48:49.276 chilemat[464:124414] gender : male
              */
             
             // ¿Está registrado?
             dao *objDAO = [[dao alloc] init];
             
             //----------------------------------------------------------------
             //Observación: Llamada remota al Cloud para crear el Id usuario
             //----------------------------------------------------------------
             
             int intIdUsuario = [objDAO obtainCurrentIdUser];
             
             [self updateloginUserCLoud:intIdUsuario strIdSocialLogin:strSocialLogin];
             //**************
             //Después de actualizar el Cloud, el usuario puede haber cambiado.
             
             intIdUsuario = [objDAO obtainCurrentIdUser];
             
             //-----------------------------------------------------
             //Marcamos el login con Facebook.
             [objDAO insertUsrLogged:1 idUsuario:intIdUsuario]; //5.- Logeado con correo, 1.- Logeado con Facebook
             
             //Grabamos la sesión de usuario actual al login
             [objDAO deleteCurrentIdUser];
             [objDAO insertCurrentIdUser:intIdUsuario];
             
             NSString *strUser, *strPassword;
             
             strUser = @"";
             strPassword = @"";
             //strSocialLogin (Viene de [fbUserData objectForKey:@"id"])
             
             int intExisteIdUsuario = [objDAO obtainUserSistem:intIdUsuario];
             
             if (intExisteIdUsuario == -1) { //Si no existe lo creo, sino lo actualizo
                 
                 [objDAO insertUserSistem:intIdUsuario strUser:strUser strPassword:strPassword strSocialLoginId:strSocialLogin strEmail:strEmail];
                 
             }else{
                 [objDAO updateUserSistem:intIdUsuario strUser:strUser strPassword:strPassword strSocialLoginId:strSocialLogin strEmail:strEmail];
                 
             }
             //---------------------------------------------------------------------------------------------------------------------------------------------
             int intIdUsrRegistered = 0;
             
             intIdUsuario = [objDAO obtainCurrentIdUser];
             
             intIdUsrRegistered = [objDAO obtainUsrRegistered:intIdUsuario];
             
             //***********************************************
             //  intIdUsrRegistered = 1; //No registrado
             //***********************************************
             
             if (intIdUsrRegistered != -1) {
                 //Si
                 viewLoadingBg.hidden = NO;
                 [self performSegueWithIdentifier:@"segueDespachoLogin" sender:nil];
                 
             }else{
                 //No
                 //Observación: Procedemos a actualizar o crear los datos de registro del usuario.
                 
                 if ([objDAO obtainMaestroClientes: intIdUsuario] > 0) {
                     //Actualizamos
                     
                     [objDAO upateMaestroClientes:0 intIdUsuario:intIdUsuario strDigito:@"" strNombreCompleto:strNombreCompleto strApellidos:strApellidos strCodTelefono:@"" strTelefono:@"" intDia:intDia intMes:intMes intAno:intAno strSex:strSex intFormaPago:0 strEmail:strEmail];
                 }else{
                     //Creamos
                     
                     [objDAO insertMaestroClientes:0 intIdUsuario:intIdUsuario strDigito:@"" strNombreCompleto:strNombreCompleto strApellidos:strApellidos strCodTelefono:@"" strTelefono:@"" intDia:intDia intMes:intMes intAno:intAno strSex:strSex intFormaPago:0 strEmail:strEmail];
                 }
                 
                 [objDAO insertRegisterBack:1]; //Identifica que el botón volver de la sección de registro no debe ser mostrado.
                 
                 //Identifica que en el formulario de registro general se debe hacer un Load de la información.
                 [objDAO deleteClientAction];
                 [objDAO insertClientAction:@"Load"];
                 
                 viewLoadingBg.hidden = NO;
                 
                 [self performSegueWithIdentifier:@"segueFormUser" sender:nil];
             }
             
         } //if (!error)
         else{
         
             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                             message:@"Error en la comunicación con Facebook <FBGraphUser>, intente nuevamente."
                                                            delegate:nil
                                                   cancelButtonTitle:@"OK"
                                                   otherButtonTitles:nil];
             [alert show];
         
         }
     }];
    
    
    loginView.hidden = YES;
    viewLoadingBg.hidden = NO;
    
}

// Handle possible errors that can occur during login
- (void)loginView:(FBLoginView *)loginView handleError:(NSError *)error {
    NSString *alertMessage, *alertTitle;
    
    // If the user should perform an action outside of you app to recover,
    // the SDK will provide a message for the user, you just need to surface it.
    // This conveniently handles cases like Facebook password change or unverified Facebook accounts.
    if ([FBErrorUtility shouldNotifyUserForError:error]) {
        alertTitle = @"Facebook error";
        alertMessage = [FBErrorUtility userMessageForError:error];
        
        // This code will handle session closures that happen outside of the app
        // You can take a look at our error handling guide to know more about it
        // https://developers.facebook.com/docs/ios/errors
    } else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryAuthenticationReopenSession) {
        alertTitle = @"Session Error";
        alertMessage = @"Your current session is no longer valid. Please log in again.";
        
        // If the user has cancelled a login, we will do nothing.
        // You can also choose to show the user a message if cancelling login will result in
        // the user not being able to complete a task they had initiated in your app
        // (like accessing FB-stored information or posting to Facebook)
    } else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled) {
        NSLog(@"user cancelled login");
        
        // For simplicity, this sample handles other errors with a generic message
        // You can checkout our error handling guide for more detailed information
        // https://developers.facebook.com/docs/ios/errors
    } else {
        alertTitle  = @"Something went wrong";
        alertMessage = @"Please try again later.";
        NSLog(@"Unexpected error:%@", error);
    }
    
    if (alertMessage) {
        [[[UIAlertView alloc] initWithTitle:alertTitle
                                    message:alertMessage
                                   delegate:nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil] show];
    }
}

-(void) touchesBegan :(NSSet *) touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
    
    [super touchesBegan:touches withEvent:event ];
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    
    if (textField == textEmail) {
        
        [textEmail resignFirstResponder];
        [textPassword becomeFirstResponder];
        
    }else if (textField == textPassword) {
        
        [textPassword resignFirstResponder];
        
    }else {
        
        [self.view endEditing:YES];
    }
    
    return NO;
}


- (void)viewWillAppear:(BOOL)animated {

/*
 1.- Esta Logeado con Facebook?
 2.- Esta Logeado con Email?
//-------------------------------------------------------

 1.- Facebook
 2.- Twitter
 3.- Google
 4.- Linked In
 5.- Email
*/

//Si está logeado al menos con uno de los anteriores nos vamos a la siguiente ventana
    viewLoadingBg.hidden = YES; //Vista de backgroud login oculta
    
    dao *objDAO = [[dao alloc] init];
    int intUsrLoggedEmail = 0;
    int intUsrLoggedFacebook = 0;
    
    int intIdUsrRegistered = 0;
    
    int intIdUsuario = [objDAO obtainCurrentIdUser];
    
    intUsrLoggedEmail = [objDAO obtainUsrLogged:5 idUsuario:intIdUsuario];
    intUsrLoggedFacebook = [objDAO obtainUsrLogged:1 idUsuario:intIdUsuario];

// ¿Está logeado?
//***********************************************
// intUsrLoggedEmail = 1; //Logeado con correo
//***********************************************
    
    if ((intUsrLoggedEmail == -1) && (intUsrLoggedFacebook == -1)) {
    //No
        
        NSLog(@"FB Login inhabilitado");

        //Botón de login con Facebook y formulario normal.
        //-------------------------------------------------------
/*
        loginview.readPermissions =    @[@"email",
                                         @"basic_info",
                                         @"user_location",
                                         @"user_birthday",
                                         @"user_likes"];
 
        public_profile
*/
        
        FBLoginView *loginView = [[FBLoginView alloc] initWithReadPermissions:@[@"email", @"public_profile", @"user_birthday"]];
        loginView.delegate = self;
        
        CGRect objRectMake = CGRectMake(5, 80, 295, 50);
        
        loginView.frame = CGRectOffset(objRectMake, 5, 5);
//      loginView.backgroundColor = [UIColor redColor];
        
        [self.view addSubview:loginView];
        

        //-------------------------------------------------------
        
    }else if ((intUsrLoggedEmail != -1) || (intUsrLoggedFacebook != -1)){
    //Si

// ¿Está registrado?
    intIdUsrRegistered = [objDAO obtainUsrRegistered:intIdUsuario];
//***********************************************
//  intIdUsrRegistered = 1; //No registrado
//***********************************************
        
        if (intIdUsrRegistered != -1) {
        //Si
            viewLoadingBg.hidden = NO;

            [objDAO deleteClientAction];
            [objDAO insertClientAction:@"Load"]; //Indicamos que en la ventana de edición del cliente se debe hacer load desde SqlLite
            
            [self performSegueWithIdentifier:@"segueDespachoLogin" sender:nil];

        }else{
        //No
            viewLoadingBg.hidden = NO;
            
            [self performSegueWithIdentifier:@"segueFormUser" sender:nil];
        }
    }
 
//  [self performSegueWithIdentifier:@"segueFormUser" sender:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.textEmail.delegate = self;
    self.textPassword.delegate = self;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)backToCart:(id)sender {
    
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (IBAction)callNumber:(id)sender {
    
    NSString *strContactPhone;
    
    dao *objDAO = [[dao alloc] init];
    
    strContactPhone = [NSString stringWithFormat:@"tel://%@", [objDAO obtainCallCenterNumber]];
    
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:strContactPhone]];
}

- (IBAction)logon:(id)sender {
    
    //Revisamos desde donde viene la solicitud de Login al sistema
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *myString = [prefs stringForKey:@"strCurrentTypeOfLogin"]; //1: Login normal, 2: Login desde el área personal
    
    bool blnRetorno = [self validateInputs];
    
    if (blnRetorno) {

        if (([myString isEqualToString:@"1"])) {
            
            blnRetorno = [self logonSystem];
            
            if (blnRetorno) {
                
                [self performSegueWithIdentifier:@"segueDespachoLogin" sender:nil];
            }else{
                
                aiViewBtnIngresar.hidden = YES;
            }

        }else{
            blnRetorno = [self logonSystem];
            
            [prefs setObject:@"1" forKey:@"strCurrentTypeOfLogin"]; //1: Login normal, 2: Login desde el área personal

            if (blnRetorno) {
                
                [self performSegueWithIdentifier:@"segueAccount" sender:nil];
            }else{

                aiViewBtnIngresar.hidden = YES;
            }
            
        }
    
    }
    
    
}

- (BOOL) validEmail:(NSString*) emailString {
    
    if([emailString length]==0){
        return NO;
    }
    
    NSString *regExPattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    
    NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
    NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
    
//  NSLog(@"%lu", (unsigned long)regExMatches);
    
    if (regExMatches == 0) {
        return NO;
    } else {
        return YES;
    }
}

- (BOOL) validateInputs{

    bool blnRetorno = YES;
    bool blnValidarEmail = YES;

    if (textEmail.text.length == 0) {

        blnRetorno = NO;
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                        message:@"Debe ingresar un Email."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];

        [textEmail becomeFirstResponder];
    }

    if (blnRetorno) {
        
        blnValidarEmail = [self validEmail:textEmail.text];
        
        if (!blnValidarEmail) {
            blnRetorno = NO;
            
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                            message:@"El Email ingresado no es correcto."
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
            
            [textEmail becomeFirstResponder];
        }
    }
    
    if ((textPassword.text.length == 0) && (blnRetorno)) {
        
        blnRetorno = NO;
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                        message:@"Debe ingresar un Password."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        
        [textPassword becomeFirstResponder];
    }
    
    return blnRetorno;
}

-(int) loginUserCLoud:(int) intIdUsuario strEmail:(NSString *) strEmail strPassword:(NSString *) strPassword{
    
/*
 Parámetros de Entrada:
 Id de usuario
 Email
 Contraseña

 IF (Si el correo no existe = UPDATE al usuario y retornar el ID de usuario + ID_Estado = 1)
 
 ELSE IF ( Si el correo ya existe y el password corresponde = UPDATE al usuario y retornar el ID de usuario + ID_Estado = 2. )
 
 ELSE IF (Si el correo ya existe y el password no corresponde = No hacer nada y retornar el ID de usuario = 0 + ID_Estado = 3)
*/
    
    strEmail = [strEmail lowercaseString];
    
    //Create or Product Shopping Cart
    NSString *strUrl = [NSString stringWithFormat:@"http://mobileecommerce.elasticbeanstalk.com/MobileJsonRegistraUsuario.aspx?strJsonBase=JsonUsuarioUpd&strIdUsuario=%i&strIdSocialLogin=%@&strClaveUsuarioSistema=%@", intIdUsuario, strEmail, strPassword];
    
    NSURL *url = [NSURL URLWithString:strUrl];
    
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    
    NSURLResponse * response = nil;
    NSError * error = nil;
    NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
                                          returningResponse:&response
                                                      error:&error];
    if (error == nil)
    {
        //[{"usr":"38", "est":"2" }]
        json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        
        int intIdRetorno = [ [[json objectAtIndex:0] objectForKey:@"est"] intValue];
        int intIdUsuarioExistente = [ [[json objectAtIndex:0] objectForKey:@"usr"] intValue];
        
        if (intIdRetorno == 2) { //En este caso es obligatorio que usuario y password correspondan
            
            if (intIdUsuario != intIdUsuarioExistente) {//Significa que el usuario hizo logout y volvió a comprar, se actualiza en Amazon el carro y debe hacerse lo mismo localmente.
                dao *objDAO = [[dao alloc] init];
                [objDAO deleteCurrentIdUser];
                [objDAO insertCurrentIdUser:intIdUsuarioExistente];
                
                //Update al usuario del carro de compras local.
                //- (int ) updateUserShoppingCart:(int) intIdUsuario intIdUsuarioNew:(int) intIdUsuarioNew{
                
                [objDAO updateUserShoppingCart:intIdUsuario intIdUsuarioNew:intIdUsuarioExistente];
            }
            
            return 1;
        }else{
            return 3;
        }

        [aiViewBtnIngresar stopAnimating];
        
        return 1;
    }else{
/*
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @""
                                                       message: @"Un error al grabar el carro a ocurrido, intente nuevamente."
                                                      delegate: self
                                             cancelButtonTitle:@"Seguir comprando"
                                             otherButtonTitles:@"Ir al carrito",nil];
        [alert show];
*/
        NSLog(@"Error");

        [aiViewBtnIngresar stopAnimating];
        return -1;
    }
}


-(bool) logonSystem{

    bool blnRetorno = YES;

    dao *objDAO = [[dao alloc] init];
    int intIdUsuario = [objDAO obtainCurrentIdUser];

    int intIdUsrRegistered = 0;
    
    //SELECT USIS_ID FROM ECOM_REGISTERED
    intIdUsrRegistered = [objDAO obtainUsrRegistered:intIdUsuario];   //Revisamos si el usuario paso por el proceso de registro
    
    if (intIdUsrRegistered != -1) {
        //Si
        viewLoadingBg.hidden = NO;
        
        //Identifica que en el formulario de registro general se debe hacer un Load de la información.
        [objDAO deleteClientAction];
        [objDAO insertClientAction:@"Load"];
        
        blnRetorno = YES;
        
    }else{ //if(intIdUsrRegistered != -1)
        
        //----------
//      blnRetorno = [self validateInputs];
        
        if (blnRetorno) {
            
            NSLog(@"Segue !!!!!!!");
            
            //----------------------------------------------------------------
            //Observación: Llamada remota al Cloud para crear el Id usuario
            //----------------------------------------------------------------
/*
            UIActivityIndicatorView *aiViewBtnIngresar;
            
            aiViewBtnIngresar = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            aiViewBtnIngresar.hidesWhenStopped = YES; //I added this just so I could see it
            
            [aiViewBtnIngresar setFrame:CGRectMake(210, 15, 40, 40)];
            
            [self.btnIngresar addSubview:aiViewBtnIngresar];
            
            [aiViewBtnIngresar startAnimating];
*/
            int intRetornoCloud = [self loginUserCLoud:intIdUsuario strEmail:textEmail.text strPassword:textPassword.text];
            
            //Puede existir un cambio de usuario en el cloud
            int intIdUsuario = [objDAO obtainCurrentIdUser];
            
            if (intRetornoCloud == 1) { //Login correcto, Update al usuario existiera o no el correo.
                //-----------------------------------------------------
                //Marcamos el login con Correo.
                //INSERT INTO ECOM_LOGGED
                [objDAO deleteUsrLogged:intIdUsuario];
                [objDAO insertUsrLogged:5 idUsuario:intIdUsuario]; //5.- Logeado con correo, 1.- Logeado con Facebook
                
                //Si se logió con correo significa que está registrado en el sistema, se debe descargar la data y llenar la tabla local con el dato del cloud.
                /********************************************************************************************/
                //INSERT INTO ECOM_REGISTERED
                [objDAO deleteUsrRegistered:intIdUsuario];
                [objDAO insertUsrRegistered:intIdUsuario];
                
                NSString *strUser, *strPassword, *strSocialLogin;
                
                strUser = @"";
                strPassword = textPassword.text;
                strSocialLogin = @"";
                
                int intExisteIdUsuario = [objDAO obtainUserSistem:intIdUsuario];
                
                //INSERT INTO ECOM_USUARIOS_SISTEMAS
                if (intExisteIdUsuario == -1) { //Si no existe lo creo, sino lo actualizo
                    
                    [objDAO insertUserSistem:intIdUsuario strUser:strUser strPassword:strPassword strSocialLoginId:strSocialLogin strEmail:textEmail.text];
                    
                }else{
                    [objDAO updateUserSistem:intIdUsuario strUser:strUser strPassword:strPassword strSocialLoginId:strSocialLogin strEmail:textEmail.text];
                    
                }
                //-------------------------------------------------------------------------------------------------------------------------
                
                //Identifica que en el formulario de registro general se debe hacer un Load de la información.
                
                //DELETE FROM ECOM_CLIENT_ACTION
                [objDAO deleteClientAction];
                [objDAO insertClientAction:@"Load"];
                
                blnRetorno = YES;
                
            }else if (intRetornoCloud == 3){ //Correo existe pero el password es incorrecto
                
                blnRetorno = NO;
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                                message:@"El email o contraseña propocionados son incorrectos."
                                                               delegate:nil
                                                      cancelButtonTitle:@"OK"
                                                      otherButtonTitles:nil];
                [alert show];
                
            }else{
                
                blnRetorno = NO;
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                                message:@"Un error remoto a ocurrido, intente nuevamente."
                                                               delegate:nil
                                                      cancelButtonTitle:@"OK"
                                                      otherButtonTitles:nil];
                [alert show];
            }
            
        } //if (blnRetorno) validateInputs
        
        
    } //if(intIdUsrRegistered != -1)

    return blnRetorno;

}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
    
    bool blnRetorno = YES;
    
//Presionando el botón ingresar
    if  ([identifier isEqualToString:@"segueDespachoLogin"]) {

        blnRetorno = [self logonSystem];
    }

//Botón oculto
    if ([identifier isEqualToString:@"segueFormUser"]){
    
            blnRetorno = YES;
    }

    if ([identifier isEqualToString:@"segueAccount"]){
        
        blnRetorno = [self logonSystem];
    }
    
    return blnRetorno;
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    
}

@end




